package com.certapp.dao.mapper;

import com.certapp.dao.entity.TbAccountInfo;
import com.certapp.dao.entity.TbAccountInfoExample;
import java.util.List;
import java.util.Optional;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.type.JdbcType;

public interface TbAccountInfoMapper {

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @SelectProvider(type = TbAccountInfoSqlProvider.class, method = "countByExample")
    long countByExample(TbAccountInfoExample example);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @DeleteProvider(type = TbAccountInfoSqlProvider.class, method = "deleteByExample")
    int deleteByExample(TbAccountInfoExample example);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @Delete({"delete from tb_account_info", "where account = #{account,jdbcType=VARCHAR}"})
    int deleteByPrimaryKey(String account);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @Insert({"insert into tb_account_info (account, account_pwd, ",
            "login_fail_time, account_status, ", "description, create_time, ", "modify_time)",
            "values (#{account,jdbcType=VARCHAR}, #{accountPwd,jdbcType=VARCHAR}, ",
            "#{loginFailTime,jdbcType=INTEGER}, #{accountStatus,jdbcType=INTEGER}, ",
            "#{description,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, ",
            "#{modifyTime,jdbcType=TIMESTAMP})"})
    int insert(TbAccountInfo record);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @InsertProvider(type = TbAccountInfoSqlProvider.class, method = "insertSelective")
    int insertSelective(TbAccountInfo record);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @SelectProvider(type = TbAccountInfoSqlProvider.class, method = "selectByExample")
    @Results({
            @Result(column = "account", property = "account", jdbcType = JdbcType.VARCHAR,
                    id = true),
            @Result(column = "account_pwd", property = "accountPwd", jdbcType = JdbcType.VARCHAR),
            @Result(column = "login_fail_time", property = "loginFailTime",
                    jdbcType = JdbcType.INTEGER),
            @Result(column = "account_status", property = "accountStatus",
                    jdbcType = JdbcType.INTEGER),
            @Result(column = "description", property = "description", jdbcType = JdbcType.VARCHAR),
            @Result(column = "create_time", property = "createTime", jdbcType = JdbcType.TIMESTAMP),
            @Result(column = "modify_time", property = "modifyTime",
                    jdbcType = JdbcType.TIMESTAMP)})
    List<TbAccountInfo> selectByExample(TbAccountInfoExample example);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @Select({"select",
            "account, account_pwd, login_fail_time, account_status, description, create_time, ",
            "modify_time", "from tb_account_info", "where account = #{account,jdbcType=VARCHAR}"})
    @Results({
            @Result(column = "account", property = "account", jdbcType = JdbcType.VARCHAR,
                    id = true),
            @Result(column = "account_pwd", property = "accountPwd", jdbcType = JdbcType.VARCHAR),
            @Result(column = "login_fail_time", property = "loginFailTime",
                    jdbcType = JdbcType.INTEGER),
            @Result(column = "account_status", property = "accountStatus",
                    jdbcType = JdbcType.INTEGER),
            @Result(column = "description", property = "description", jdbcType = JdbcType.VARCHAR),
            @Result(column = "create_time", property = "createTime", jdbcType = JdbcType.TIMESTAMP),
            @Result(column = "modify_time", property = "modifyTime",
                    jdbcType = JdbcType.TIMESTAMP)})
    TbAccountInfo selectByPrimaryKey(String account);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @UpdateProvider(type = TbAccountInfoSqlProvider.class, method = "updateByExampleSelective")
    int updateByExampleSelective(@Param("record") TbAccountInfo record,
            @Param("example") TbAccountInfoExample example);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @UpdateProvider(type = TbAccountInfoSqlProvider.class, method = "updateByExample")
    int updateByExample(@Param("record") TbAccountInfo record,
            @Param("example") TbAccountInfoExample example);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @UpdateProvider(type = TbAccountInfoSqlProvider.class, method = "updateByPrimaryKeySelective")
    int updateByPrimaryKeySelective(TbAccountInfo record);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @Update({"update tb_account_info", "set account_pwd = #{accountPwd,jdbcType=VARCHAR},",
            "login_fail_time = #{loginFailTime,jdbcType=INTEGER},",
            "account_status = #{accountStatus,jdbcType=INTEGER},",
            "description = #{description,jdbcType=VARCHAR},",
            "create_time = #{createTime,jdbcType=TIMESTAMP},",
            "modify_time = #{modifyTime,jdbcType=TIMESTAMP}",
            "where account = #{account,jdbcType=VARCHAR}"})
    int updateByPrimaryKey(TbAccountInfo record);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @Options(useGeneratedKeys = true, keyProperty = "account", keyColumn = "account")
    @Insert({"<script>", "insert into tb_account_info (account, ", "account_pwd, login_fail_time, ",
            "account_status, description, ", "create_time, modify_time)",
            "values<foreach collection=\"list\" item=\"detail\" index=\"index\" separator=\",\">(#{detail.account,jdbcType=VARCHAR}, ",
            "#{detail.accountPwd,jdbcType=VARCHAR}, #{detail.loginFailTime,jdbcType=INTEGER}, ",
            "#{detail.accountStatus,jdbcType=INTEGER}, #{detail.description,jdbcType=VARCHAR}, ",
            "#{detail.createTime,jdbcType=TIMESTAMP}, #{detail.modifyTime,jdbcType=TIMESTAMP})</foreach></script>"})
    int batchInsert(List<TbAccountInfo> list);

    /**
     * This method was generated by MyBatis Generator. This method corresponds to the database table
     * tb_account_info
     *
     * @mbg.generated
     */
    @SelectProvider(type = TbAccountInfoSqlProvider.class, method = "getOneByExample")
    @Results({
            @Result(column = "account", property = "account", jdbcType = JdbcType.VARCHAR,
                    id = true),
            @Result(column = "account_pwd", property = "accountPwd", jdbcType = JdbcType.VARCHAR),
            @Result(column = "login_fail_time", property = "loginFailTime",
                    jdbcType = JdbcType.INTEGER),
            @Result(column = "account_status", property = "accountStatus",
                    jdbcType = JdbcType.INTEGER),
            @Result(column = "description", property = "description", jdbcType = JdbcType.VARCHAR),
            @Result(column = "create_time", property = "createTime", jdbcType = JdbcType.TIMESTAMP),
            @Result(column = "modify_time", property = "modifyTime",
                    jdbcType = JdbcType.TIMESTAMP)})
    Optional<TbAccountInfo> getOneByExample(TbAccountInfoExample example);
}
